package cn.demoncat.util.selenide;

import com.codeborne.selenide.Browsers;
import com.codeborne.selenide.Configuration;
import org.apache.commons.lang3.StringUtils;

/**
 * Selenide 工具
 *
 * 1、下载驱动，调用config 指定存放目录
 * 2、调用 firefox,chrome 指定浏览器程序
 * 3、open() 打开网址，完成测试抓取
 *
 * @author 延晓磊
 * @since 2020/9/26
 */
public class SelenideUtil {

    /**
     * 配置（执行操作前）
     *
     * 1、下载浏览器驱动，放到 D:/selenide
     * 2、调用本方法指定工作目录为  D:/selenide
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void config(){
        config(null);
    }

    /**
     * 配置（执行操作前）
     *
     * @param dir   本地目录：存放运行文件、报告、驱动，默认"D://selenide/"
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void config(String dir){
        config(dir, 10);
    }

    /**
     * 配置（执行操作前）
     *
     * @param timeout   加载超时秒数
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void config(int timeout){
        config(null, true, timeout);
    }

    /**
     * 配置（执行操作前）
     *
     * @param dir   本地目录：存放运行文件、报告、驱动，默认"D://selenide/"
     * @param timeout   加载超时秒数
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void config(String dir, int timeout){
        config(dir, true, timeout);
    }

    /**
     * 配置（执行操作前）
     *
     * @param dir   本地目录：存放运行文件、报告、驱动，默认"D://selenide/"
     * @param holdBrowserOpen  完成后是否不关闭浏览器
     * @param timeout   加载超时秒数
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void config(String dir, boolean holdBrowserOpen, int timeout){
        // 本地文件路径
        if (StringUtils.isBlank(dir)) {
            dir = "D://selenide/";
        }else{
            if (!dir.endsWith("/")) {
                dir += "/";
            }
        }
        // 文件下载地址
        Configuration.downloadsFolder = dir + "downloads";
        // 报告保存地址
        Configuration.reportsFolder = dir + "tests";
        // 火狐驱动：https://github.com/mozilla/geckodriver/tags
        System.setProperty("webdriver.gecko.driver", dir + "geckodriver.exe");
        // 谷歌驱动：http://chromedriver.storage.googleapis.com/index.html
        System.setProperty("webdriver.chrome.driver", dir + "chromedriver.exe");
        // 测试完不关闭浏览器（默认关闭）
        Configuration.holdBrowserOpen = holdBrowserOpen;
        // 等待超时（指定毫秒内不满足条件，就当作失败）
        Configuration.timeout = timeout * 1000;
    }

    /**
     * 使用火狐浏览器
     *
     * @param path  firefox.exe 地址（默认从系统PATH获取，版本对应geckodriver.exe）
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void firefox(String path){
        // 使用火狐浏览器（默认谷歌）
        Configuration.browser = Browsers.FIREFOX;
        // 指定程序地址（默认从系统PATH获取）
        if (StringUtils.isNotBlank(path)) {
            Configuration.browserBinary = path;
        }
    }

    /**
     * 使用谷歌浏览器
     *
     * @param path  chrome.exe 地址（默认从系统PATH获取，版本对应chromedriver.exe）
     *
     * @author 延晓磊
     * @since 2020年09月26日
     */
    public static void chrome(String path){
        // 使用谷歌浏览器（默认谷歌）
        Configuration.browser = Browsers.CHROME;
        // 指定程序地址（默认从系统PATH获取）
        if (StringUtils.isNotBlank(path)) {
            Configuration.browserBinary = path;
        }
    }
}
